package com.service.serviceImpl;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mapper.UserMapper;
import com.model.User;
import com.service.UserService;
import com.utils.JWTUtil;
import com.utils.PwdUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.Map;
import java.util.Random;

/**
 * 用户服务的实现接口
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    QueryWrapper<User> qr=new QueryWrapper<>();

    /**
     * 注册新用户
     * @param userInfo 用户的基本信息
     * @return
     */
    @Override
    public boolean register(Map<String, String> userInfo) {
        User user=parseToUser(userInfo);
        if(user!=null){
            //查询数据库是否有记录，判断账号是否已经注册
            int i=count(qr.eq("phone",user.getPhone()));
            //账号已注册,返回false
            if(i>0) {
                return false;
            } else {
            //尚未注册，添加到数据库
                if(save(user))
                    return true;
                else
                    return false;

            }
        }
        return false;
    }

    @Override
    public String login(String phone, String pwd) {
        User user=getOne(qr.eq("phone",phone).eq("pwd",PwdUtil.MD5(pwd)));
        String token=null;
        if(user!=null){
            //生成token
            token= JWTUtil.geneJsonWebToken(user);
        }
        return token;
    }


    /**
     * 根据包含用户信息的map生成实体user
     * @param userInfo
     * @return user
     */
    public User parseToUser(Map<String,String> userInfo) {
        String phone=userInfo.get("phone");
        String pwd=userInfo.get("pwd");
        String name=null;
        //账号密码非空，包括不能是空格
        if (StringUtils.isNotBlank(phone) && StringUtils.isNotBlank(pwd)) {
            User user = new User();
            //账号
            user.setPhone(phone);
            //确保安全，对用户密码加密后才存入数据库
            user.setPwd(PwdUtil.MD5(pwd));
            //如果用户没有填写昵称，默认生成
            name=userInfo.get("name");
            name = StringUtils.isNotBlank(name)? name : "p***"+phone.substring(2,4);
            user.setName(name);
            //随机分配头像
            user.setHeadImg(getRandomImg());
            //创建日期
            user.setCreateTime(new Date());
            return user;
        }else {
            return null;
        }
    }

    /*
    默认头像列表
     */
    private static final String[] headImg={
            "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/12.jpeg",
            "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/11.jpeg",
            "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/13.jpeg",
            "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/14.jpeg",
            "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/15.jpeg"
    };
    /*
    随机生成头像
     */
    private String getRandomImg(){
        int size=headImg.length;
        Random random=new Random();
        int index=random.nextInt(size);
        return headImg[index];

    }

}
